<?php
/**
 * NT_Default_Controller é o controller do qual todas as páginas
 * do site normalmente vão extender. Inclusive as do manager.
 * 
 * Se necessário você pode especializar (extender) este controller e então
 * as páginas públicas/site/normal extenderem dele. Atenção que o que implementado
 * nesta classe atinge o manager também uma vez que 
 * NT_Manager_Controller extends NT_Default_Controller.
 *
 * @author Níssius Ribas
 */
class NT_Default_Controller extends CI_Controller {

    public function __construct() {
        parent::__construct();
        
        $testMode = $this->nt_manager_testmode->getTestMode();
        // se o test mode esta ativo, pede usuario e senha para acessar o conteúdo
        if ($testMode['ATIVO']) {
            $authok = $this->session->userdata("testmodeautorizado");
            if($authok != 1){
                $url = base_url()."manager/ops/login";
                redirect($url);
                die("Test mode is on. You are not alowed to see this content");
            }
            
        }// fim, o test mode está ativo
    }
}




/**
 * Classe pai da qual devem extender todos os controllers do manager.
 * 
 * Exceções a isso são controlers que não tem verificação de permissões/login
 * ou que não se caracteriazam com o manager padrão. Neste caso recomendo extender 
 * de NT_Default_Controller e implementar o restante da lógica de negócio.
 * 
 * URL's de referência: 
 * - http://stackoverflow.com/questions/12833504/how-to-check-user-permission-given-to-user-code-igniter
 * - http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY
 * - http://www.highermedia.com/articles/nuts_bolts/codeigniter_base_classes_revisited
 *
 ** @author Níssius Ribas
 */
class NT_Manager_Controller extends NT_Default_Controller {

    public function __construct() {
        parent::__construct();

        // pega os dados do usuario que esta logado
        $logado = $this->session->userdata('login');

        if (!isset($logado['id']))
            $logado['id'] = -400; // se nao tiver, o id usuario eh um que nao existe



            
// monta o mapa de permissoes, que vai ser usado cada vez que chamar $this->checkLogin()
        $this->nt_manager_permissoes->buildPermissionMap($logado['id']);

        $this->load->model("nt_manager_menus");
        $this->nt_manager_menus->buildMenuMapFor($logado['id']);

        $this->load->library("greetings");
    }

    /**
     * Chame este método nos contrutores dos controllers dos quais quer controllar
     * permissao de acesso
     * 
     * @param bollean $noRedirect passa true se quer que ele apenas de o erro die(), false (padrão) se ele deve redirecionar embora
     */
    public function checkLogin($noRedirect = false) {

        // verifica se essa url, segmento esta no mapa do usuario logado
        // se nao esta, perdeu!
        if (!$this->nt_manager_permissoes->isValid($this->uri->segments)) {

            $strTentativa = implode("/", $this->uri->segments);
            $this->nt_global_logs->s("permissoes", "Tentativa de acesso e foi negado em \'$strTentativa\'");

            // força logout
            $this->session->unset_userdata("login");
            // $this->session->sess_destroy(); // assim pode atrapalhar outras coisas
            if ($noRedirect) {
                die("Access denied");
            } else {
                redirect(base_url() . "manager/login");
                die("Access denied");
            }
        }
    }

     public function alterar_status($base64_table_and_field, $row_ID) {
        $this->load->model("nt_grocery");
        $this->nt_grocery->ajxBooleanReverseStatusDecode($base64_table_and_field, $row_ID);
    }
    
    public function alterar_ordem($field_name = false, $id = false, $ordem = false, $tabela = false){
        $this->load->model("nt_grocery");
        return $this->nt_grocery->ajxordem($field_name, $id, $ordem, $tabela);
    }
    
    public function selecao_multipla($acao = false, $ids = false){
        $this->load->model("nt_grocery");
        return $this->nt_grocery->ajxmultiselect($acao, $ids);
    }  
}
